package com.backend.demo1.global;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import com.backend.demo1.config.ApiException;
import com.backend.demo1.config.ApiResponse;
import com.backend.demo1.config.AppConfig;

import org.slf4j.event.Level;

@RestControllerAdvice
public class GlobalExceptionHandler {

    @Autowired
    private AppConfig appConfig;

    @ExceptionHandler(Exception.class)
    public ResponseEntity<ApiResponse<String>> handleException(Exception e) {
        String errorMessage;
        int statusCode = 500;

        if (e instanceof ApiException apiException) {
            // 使用 ApiException 中的 code 和 message
            statusCode = apiException.getApiResponse().getCode();
            errorMessage = apiException.getMessage();
            Level level = apiException.getLogLevel();

            // 根据环境决定是否返回原始消息
            if (!appConfig.isDevMode()) {
                if (level == Level.WARN) {
                    errorMessage = "请求异常，请检查输入参数";
                } else if (level == Level.ERROR) {
                    errorMessage = "系统内部错误，请稍后再试";
                }
                // Level.INFO 可以直接透传原消息（如 2xx/3xx 场景）
            }

        } else {
            // 普通 Exception 统一按 error 处理
            errorMessage = "系统内部错误，请稍后再试";
        }

        return ResponseEntity.status(statusCode).body(ApiResponse.error(statusCode, errorMessage));
    }

}